      SUBROUTINE ALEGQ(Z,M,NMAX,Q)                                      00010000
CCC                                                                     00020000
CCC           THE ASSOCIATED LEGENDRE FUNCTION OF SECOND KIND           00030000
CCC           WITH REAL ARGUMENT OF ORDER M AND DEGREE 0 TO NMAX.       00040000
CCC           Q(M,N,Z) : 0<Z<1.0 OR Z>1.0 , N = 0-NMAX                  00050000
CCC           Q(0,N,Z) : UPWARD RECURSION FOR Z<1.0.                    00060000
CCC           Q(0,N,Z) : DOWNWARD RECURSION FOR Z>1.0.                  00070000
CCC           ORIGINALLY PROGRAMMED BY S.ASANO IN 1972.                 00080000
CCC           MODEFIED IN 1977.                                         00090000
CCC                                        
      IMPLICIT REAL*8(A-H,O-Z)                                          00100000
      PARAMETER (NLMT=150)                                              00110002
      DIMENSION Q(NMAX),QM0(NLMT),QM1(NLMT)                             00120002
C                                                                       00130000
      NM1=NMAX+1                                                        00140000
      IF(DABS(Z-1.D0).LE.1.D-10)  GO TO 1                               00150001
      IF(NMAX.GE.NLMT) GO TO 1                                          00160002
       GO TO 2                                                          00170001
    1 WRITE(6,100)                                                      00180000
  100 FORMAT(1H0,15X,'**  <ALEGQ> VALUE OF PARAMETER EXCEEDS THE LIMIT  00190000
     1  -   RETURN WITH NO CALCULATION' /)                              00200000
       RETURN                                                           00210000
    2 AA=1.D0/DSQRT(Z*Z-1.D0)                                           00220000
      BB=DLOG(DABS((Z+1.D0)/(Z-1.D0)))/2.D0                             00230000
        IF(Z.LT.1.D0) THEN                                              00240001
      QM0(1)=BB                                                         00250000
      QM0(2)=Z*BB-1.D0                                                  00260000
      DO 50 N=1,NMAX                                                    00270000
   50 QM0(N+2)=(DFLOAT(N+N+1)*Z*QM0(N+1)-DFLOAT(N)*QM0(N))/DFLOAT(N+1)  00280000
        ELSE                                                            00290001
      LMT=NMAX+15+(5.2/Z)                                               00300001
      S2=7.D-21                                                         00310000
      S1=1.D-20                                                         00320000
      DO 10 LL=1,LMT                                                    00330000
      L=LMT-LL                                                          00340000
      L1=L+1                                                            00350000
      S0=(DFLOAT(2*L+3)*Z*S1-DFLOAT(L+2)*S2)/DFLOAT(L+1)                00360000
      S2=S1                                                             00370000
      S1=S0                                                             00380000
      IF(L.GT.NM1) GO TO 10                                             00390000
      QM0(L1)=S0                                                        00400000
   10 CONTINUE                                                          00410000
      RATIO=BB/QM0(1)                                                   00420000
      DO 20 K=1,NM1                                                     00430000
   20 QM0(K)=QM0(K)*RATIO                                               00440000
        END IF                                                          00450001
       IF(M.EQ.0)  THEN                                                 00460001
      DO 25 N=1,NMAX                                                    00470000
   25 Q(N)=QM0(N)                                                       00480000
      RETURN                                                            00490000
       ELSE                                                             00500001
      DO 30 I=1,NMAX                                                    00510001
      II=I-1                                                            00520000
   30 QM1(I)=DFLOAT(II+1)*AA*(QM0(I+1)-Z*QM0(I))                        00530000
        IF(M.LT.2) THEN                                                 00540001
      DO 35 N=1,NMAX                                                    00550000
   35 Q(N)=QM1(N)                                                       00560000
      RETURN                                                            00570000
        ELSE                                                            00580001
      DO 40 J=1,NMAX                                                    00590001
      JJ=J-1                                                            00600000
      T0=QM0(J)                                                         00610000
      T1=QM1(J)                                                         00620000
      IM=0                                                              00630000
    5 T2=DFLOAT((JJ-IM)*(JJ+IM+1))*T0-DFLOAT(2*IM+2)*Z*AA*T1            00640000
      IM2=IM+2                                                          00650000
      IF(IM2.GE.M) GO TO 7                                              00660000
      T0=T1                                                             00670000
      T1=T2                                                             00680000
      IM=IM+1                                                           00690000
      GO TO 5                                                           00700000
    7 Q(J)=T2                                                           00710000
   40 CONTINUE                                                          00720000
      RETURN                                                            00730000
        END IF                                                          00740001
       END IF                                                           00750001
      END                                                               00760000
